package com.tanjun.publicservice.web.controller;

import com.tanjun.common.annotation.Edit;
import com.tanjun.common.model.R;
import com.tanjun.common.response.PageResponse;
import com.tanjun.pubilcservice.request.config.SysConfigPageRequest;
import com.tanjun.pubilcservice.request.config.SysConfigVo;
import com.tanjun.pubilcservice.response.config.SysConfigDto;
import com.tanjun.publicservice.web.biz.SysConfigBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

import static com.tanjun.common.constants.UrlConstant.URL_USER.ADMIN;
import static com.tanjun.common.constants.UrlConstant.URL_USER.INNER;

@RestController
@RequestMapping("sysConfig")
public class SysConfigController {
    @Autowired
    private SysConfigBiz sysConfigBiz;

    /**
     * 新增系统配置
     * @param paramVo 系统配置数据
     */
    @PostMapping(ADMIN+"/add")
    public R addSysConfig(@RequestBody @Validated SysConfigVo paramVo){
        sysConfigBiz.addSysConfig(paramVo);
        return R.OK();
    }

    /**
     * 修改系统配置
     * @param paramVo 系统配置数据
     */
    @PostMapping(ADMIN+"/update")
    public R updateSysConfig(@RequestBody @Validated(Edit.class) SysConfigVo paramVo){
        sysConfigBiz.updateSysConfig(paramVo);
        return R.OK();
    }

    /**
     * 删除系统配置
     * @param ids 系统配置ids
     */
    @PostMapping(ADMIN+"/delByIds")
    public R delSysConfigs(@RequestBody List<Long> ids){
        sysConfigBiz.delSysConfigs(ids);
        return R.OK();
    }

    /**
     * 根据id获取系统配置
     * @param id 配置id
     * @return 系统配置
     */
    @GetMapping(ADMIN+"/getById")
    public R<SysConfigDto> getSysConfigById(@RequestParam Long id){
        return R.OK(sysConfigBiz.getSysConfigById(id));
    }

    /**
     * 根据系统配置key 获取系统配置值
     * @param key 系统配置key
     * @return 系统配置
     */
    @GetMapping(INNER+"/getSystemConfigValueByKey")
    public R<String> getSystemConfigValueByKey(@RequestParam String key){
        return R.OK(sysConfigBiz.getSystemConfigValueByKey(key));
    }

    /**
     * 分页查询系统配置
     * @param paramVo 分区参数
     * @return 系统配置数据
     */
    @PostMapping(ADMIN+"/listPageConfig")
    public R<PageResponse<SysConfigDto>> listPageConfig(@RequestBody @Validated SysConfigPageRequest paramVo){
        return R.OK(sysConfigBiz.listPageConfig(paramVo));
    }

    /**
     * 清除系统配置缓存
     */
    @GetMapping(ADMIN+"/clearCache")
    public R clearCache(){
        sysConfigBiz.clearCache();
        return R.OK();
    }
}
